package edu.continental.beans;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ValueChangeEvent;

import edu.continental.bean.Ciudad;
import edu.continental.bean.Itinerario;
import edu.continental.bean.Persona;
import edu.continental.bean.TipoDocumento;
import edu.continental.bean.Ubigeo;
import edu.continental.dao.CiudadDAO;
import edu.continental.dao.ItinerarioDAO;
import edu.continental.dao.UtilDAO;
import edu.continental.util.Utilitarios;

@ManagedBean(name = "itinerario")
@SessionScoped
public class BuscarItinerario {

	private String origen;
	private String destino;
	private String tipoViaje;
	private List<Ciudad> lstCiudades;
	private List<Ciudad> lstCiudadesDestino;
	private Date fecSalida;
	private Date fecRetorno;
	private List<Itinerario> lstItinerarioSalida;
	private List<Itinerario> lstItinerarioRetorno;
	private String idSeleccionado;
	private List<TipoDocumento> lstTipoDocs;
	private Persona persona;
	
	//Variables para ubigeo
	private List<Ubigeo> lstPaises;
	private List<Ubigeo> lstDepartamento;
	private List<Ubigeo> lstProvincia;

	public BuscarItinerario() {
		System.out.println("BuscarItinerario");

		CiudadDAO dao = new CiudadDAO();

		lstCiudades = dao.listaCiudades();
		
		agregarSeleccionar(lstCiudades);
		
		lstCiudadesDestino = new ArrayList<Ciudad>();
		agregarSeleccionar(lstCiudadesDestino);
		
		lstItinerarioSalida = new ArrayList<Itinerario>();
		lstItinerarioRetorno = new ArrayList<Itinerario>();
		
	}
	
	public void cambiaOrigen(ValueChangeEvent e) {
		System.out.println("cambiaOrigen");
		
		System.out.println("--> " + e.getNewValue().toString());
		
		CiudadDAO dao = new CiudadDAO();
		lstCiudadesDestino = dao.listaCiudadDestino(e.getNewValue().toString());
		
		agregarSeleccionar(lstCiudadesDestino);
	}
	
	public void cambiaPais(ValueChangeEvent e) {
		
		System.out.println("cambiaPais");
		
		System.out.println("--> " + e.getNewValue().toString());
		
		UtilDAO dao = new UtilDAO();
		lstDepartamento = dao.listaDepartamentoXPais(e.getNewValue().toString());
		
		Utilitarios.agregarSeleccionarUbigeo(lstDepartamento);
		
	}
	
	public void cambiaLocalidad(ValueChangeEvent e) {
		
		System.out.println("cambiaLocalidad");
		
		System.out.println("--> " + e.getNewValue().toString());
		
		UtilDAO dao = new UtilDAO();
		lstProvincia = dao.listaProvinciaXDepartamento(e.getNewValue().toString());
		
		Utilitarios.agregarSeleccionarUbigeo(lstProvincia);
		
	}
	
	public void buscarItinerarios() {
		
		System.out.println("buscarItinerarios");
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
		
		ItinerarioDAO dao = new ItinerarioDAO();
		lstItinerarioSalida = dao.buscarItinerarios(sdf.format(fecSalida), origen, destino);
		
		lstItinerarioRetorno = dao.buscarItinerarios(sdf.format(fecRetorno), destino, origen);
		
	}
	
	public void elegirNumeroAsiento(String nroAsiento) {
		
		System.out.println("elegirNumeroAsiento");
		
		System.out.println("nroAsiento: " + nroAsiento);
		
	}
	
	public void elegir(String idItinerario) {
		System.out.println("elegir");
		System.out.println("idItinerario: " + idItinerario);
		idSeleccionado = idItinerario;
	}
	
	public String elegirAsiento() {
		
		System.out.println("elegirAsiento");
		
		UtilDAO dao = new UtilDAO();
		
		lstTipoDocs = dao.listaTiposDocumentos();
		persona = new Persona();
		
		lstPaises = dao.listaPaises();
		lstDepartamento = new ArrayList<Ubigeo>();
		lstProvincia = new ArrayList<Ubigeo>();
		
		Utilitarios.agregarSeleccionarTipoDoc(lstTipoDocs);
		Utilitarios.agregarSeleccionarUbigeo(lstPaises);
		Utilitarios.agregarSeleccionarUbigeo(lstDepartamento);
		Utilitarios.agregarSeleccionarUbigeo(lstProvincia);
		
		return "elegirAsiento";
		
	}
	
	public String getColorFilas() {
		
		System.out.println("getColorFilas");
		
		StringBuilder strBuild = new StringBuilder(); 
		
		if ( idSeleccionado != null && !idSeleccionado.equals("") ) {
			for(Itinerario obj : lstItinerarioSalida){ 
				if ( idSeleccionado.equals(String.valueOf(obj.getId())) ) {
					strBuild.append("rowSelected"); 
					
				} else {
					strBuild.append("rowDefault");
				}
				strBuild.append(','); 
			}
		
			int length= strBuild.length();
			
			if(length > 0){ 
				strBuild.deleteCharAt(length-1); 
			}
		}

		String rowColor = new String(strBuild);
		System.out.println("rowColor: " + rowColor);
		return rowColor; 
	}
	
	public String obtenerClasePorNroAsiento(String nroAsiento) {
		//Buscar estado de los asientos del bus
		
		return "";
	}
		

	public String getOrigen() {
		return origen;
	}

	public void setOrigen(String origen) {
		this.origen = origen;
	}

	public List<Ciudad> getLstCiudades() {
		return lstCiudades;
	}

	public void setLstCiudades(List<Ciudad> lstCiudades) {
		this.lstCiudades = lstCiudades;
	}

	public String getDestino() {
		return destino;
	}

	public void setDestino(String destino) {
		this.destino = destino;
	}

	public List<Ciudad> getLstCiudadesDestino() {
		return lstCiudadesDestino;
	}

	public void setLstCiudadesDestino(List<Ciudad> lstCiudadesDestino) {
		this.lstCiudadesDestino = lstCiudadesDestino;
	}

	public String getTipoViaje() {
		return tipoViaje;
	}

	public void setTipoViaje(String tipoViaje) {
		this.tipoViaje = tipoViaje;
	}

	public Date getFecRetorno() {
		return fecRetorno;
	}

	public void setFecRetorno(Date fecRetorno) {
		this.fecRetorno = fecRetorno;
	}

	public List<Itinerario> getLstItinerarioSalida() {
		return lstItinerarioSalida;
	}

	public void setLstItinerarioSalida(List<Itinerario> lstItinerarioSalida) {
		this.lstItinerarioSalida = lstItinerarioSalida;
	}

	public List<Itinerario> getLstItinerarioRetorno() {
		return lstItinerarioRetorno;
	}

	public void setLstItinerarioRetorno(List<Itinerario> lstItinerarioRetorno) {
		this.lstItinerarioRetorno = lstItinerarioRetorno;
	}

	public String getIdSeleccionado() {
		return idSeleccionado;
	}

	public void setIdSeleccionado(String idSeleccionado) {
		this.idSeleccionado = idSeleccionado;
	}
	
	public List<TipoDocumento> getLstTipoDocs() {
		return lstTipoDocs;
	}

	public void setLstTipoDocs(List<TipoDocumento> lstTipoDocs) {
		this.lstTipoDocs = lstTipoDocs;
	}

	public Persona getPersona() {
		return persona;
	}

	public void setPersona(Persona persona) {
		this.persona = persona;
	}

	public List<Ubigeo> getLstPaises() {
		return lstPaises;
	}

	public void setLstPaises(List<Ubigeo> lstPaises) {
		this.lstPaises = lstPaises;
	}

	public List<Ubigeo> getLstDepartamento() {
		return lstDepartamento;
	}

	public void setLstDepartamento(List<Ubigeo> lstDepartamento) {
		this.lstDepartamento = lstDepartamento;
	}

	public List<Ubigeo> getLstProvincia() {
		return lstProvincia;
	}

	public void setLstProvincia(List<Ubigeo> lstProvincia) {
		this.lstProvincia = lstProvincia;
	}

	public Date getFecSalida() {
		return fecSalida;
	}

	public void setFecSalida(Date fecSalida) {
		this.fecSalida = fecSalida;
	}

	public void agregarSeleccionar(List<Ciudad> lstCiudad) {
		
		Ciudad obj = new Ciudad();
		obj.setId("-1");
		obj.setNombre("[SELECCIONAR]");
		
		lstCiudad.add(0, obj);
		
	}
	
}
